<!DOCTYPE html>


<html lang="zh-CN">


<head>
  <meta charset="utf-8" />
  <meta name="baidu-site-verification" content="code-kg5UjKJZM2" />
   
  <meta name="keywords" content="活,炼" />
   
  <meta name="description" content="shimmerjordan" />
  
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
  <title>
    Instruction for deploying sz-education locally |  丛烨-shimmerjordan
  </title>
  <meta name="generator" content="hexo-theme-ayer">
  
  <link rel="shortcut icon" href="/favicon.ico" />
  
  
<link rel="stylesheet" href="/dist/main.css">

  <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Shen-Yu/cdn/css/remixicon.min.css">
  
<link rel="stylesheet" href="/css/custom.css">

  
  <script src="https://cdn.jsdelivr.net/npm/pace-js@1.0.2/pace.min.js"></script>
  
  

<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', 'G-Q0DT8B8VJW', 'auto');
ga('send', 'pageview');

</script>



  
<script>
var _hmt = _hmt || [];
(function() {
	var hm = document.createElement("script");
	hm.src = "https://hm.baidu.com/hm.js?6d06f826e125297d4ce0fa7a1449328e";
	var s = document.getElementsByTagName("script")[0]; 
	s.parentNode.insertBefore(hm, s);
})();
</script>


<link rel="alternate" href="/atom.xml" title="丛烨-shimmerjordan" type="application/atom+xml">
</head>

</html>

	<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/font-awesome/css/font-awesome.min.css">
	<script src="https://cdn.jsdelivr.net/gh/stevenjoezhang/live2d-widget@latest/autoload.js"></script>


<body>
  <div id="app">
    
      
    <main class="content on">
      <section class="outer">
  <article
  id="post-sz-educationLocalDeploy"
  class="article article-type-post"
  itemscope
  itemprop="blogPost"
  data-scroll-reveal
>
  <div class="article-inner">
    
    <header class="article-header">
       
<h1 class="article-title sea-center" style="border-left:0" itemprop="name">
  Instruction for deploying sz-education locally
</h1>
 

    </header>
     
    <div class="article-meta">
      <a href="/2021/03/10/sz-educationLocalDeploy/" class="article-date">
  <time datetime="2021-03-10T06:36:12.000Z" itemprop="datePublished">2021-03-10</time>
</a> 
  <div class="article-category">
    <a class="article-category-link" href="/categories/Spring-Cloud/">Spring Cloud</a>
  </div>
  
<div class="word_count">
    <span class="post-time">
        <span class="post-meta-item-icon">
            <i class="ri-quill-pen-line"></i>
            <span class="post-meta-item-text"> 字数统计:</span>
            <span class="post-count">5</span>
        </span>
    </span>

    <span class="post-time">
        &nbsp; | &nbsp;
        <span class="post-meta-item-icon">
            <i class="ri-book-open-line"></i>
            <span class="post-meta-item-text"> 阅读时长≈</span>
            <span class="post-count">1 分钟</span>
        </span>
    </span>
</div>
 
    </div>
      



  
    <div class="article-entry" itemprop="articleBody">
       
  <div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="Congratulations, wrong guess." data-whm="Do you really want to see it?">
  <script id="hbeData" type="hbeData" data-hmacdigest="bca2b197f418ece68ef61f2402a3bc5e6d3db4829cebff69862793a7da8676f6">3ab60c175e2fafe508a3c9a0bfc45b39e8e71f852125fd1f67e223e5a7f1ca51e3a6e640e745329b658210809448f304c7bb37f56d8524fbac11862504deccf33e7a8b961255779c28dd35b3decc577a65385289fd32b669639d5fdc02298f5393d65bfa53be1bf9638d594bd6a18f25da46d337e3bcb728f5643cb6c102f5eddce7d52fc956e8708bd8ea705cf0816c37464621ad4b82aee2fff5d0f7be2898db63266ae25884a091ea2883602f6c75ff891195cd58d2b7df3c10637fb2fe807e0c977627d2fe02984834d7204a2d66ad65ede92b7435a119d337ca2725496afc8ed48c17a6b288d2ef03c0f043645ea28fc677a60780208506597f183eec26580ac4f96a2c9760c030abc961449c8a081496b4b458ef118b82d130784fcf7d3dfa926f5b038b817e70d99bc8dac72520a546cb71b44ab90ef8a73938bc15010e304c1a0f87e71782bac7f7cf3b49a9fe06f6823dba362b58b1c4137ce718bc6121f98e7c5fad1067332b90decf2a2d82f41b6b2bbeb487fba0b78d38f6b635500d8c757b8d2fabe75f6e474e6bfe3e82843fe796fc8624e920eb6a51601ca0eac51c657146492cefadfce54cad0f30bcc947675c160dd996cc52964eeaf6899fdff5e81f43d786c70c1653af54f19e3232c31f296fbbd9760b86be9c7cadb6ab71aab7bd276c5310f86b3d8011a34e37bcd2de1e009306517803811e1ab447aa517780f11ba0e1b72b82eee0bb4c97434c2f0c283bb2fed4ed01232c6f4bfb369ca029efe31d097628225949c634102aa8bfd463201e27a1ea34afe6ff53e1dc17c96fdd3eb55fa9480e8bf2c731777b7a1b1b99af0ef6eeb7c12b85417d559c2c58bba11d6aa0f65826ffe6621dea11ab69f183d565377decd8e87cb9aef9f6ebcb3ba44d0487f353e11217a7375328beaff7685ec44b2a7bf7a109e144a94ee13a5abb0de7afa5c1d33e87b73f5abaac7d0d0b7205a8295440c33b6fad5cc8d8f5603f24d59e39eb344c731df694e0b4161c594dfb26a027599cd522b905e1b6cfef0496690665737f702c4ffafde55e21f1b9582a7f41caf97740880205a16ea09bc3d7010cbcde9f2eac5fbf5b48b6170ea43d9f9699086a87a728a6d3965d85c1377077090faa1219ca269e443923810ad94fd829e33c690132d314168794d0aadb6f4465f8006ed7ae9a70b4774dc3354c26825b3a048c06345be8257fac9f0aa06e5e349a37b620426d4ee5641f354ae740eb49a3977f4bcf09f9d36242b7d5385dcd1a544f35a79bcae282095c30f47f345bb6cbcf6060da1196e1910eba3a344cb476e52da4bfeacfaaac1d7b50a7e1577fa608664980cda74c5624e3260c5f2c3cc3825b5d797edf90b5694eb56a663471ea0e5dc60f5f7d08abec4ffecdaa9c4e83a09d625de2d434204c89cf6e2a4bae9a4cbc748a501125b7464f45be55ab7c612dca03b6dc9b108eb2210c5830be169eae6dd8d30efea087fba4e1c9aaf120cd07b93a0652d3960bb8d224399822a9e86501f58762b2f56e4b6d4a5af3b3dc40e1640083979de88c23afd1410e188c5cb1b1a2faaa710d551456d7ec6891e177ac20814584295a94653fe28a53d8866f10ca339eb2863bca46f6558f1aaa6b373dbfa6c4dbc19cc60b3fab0d7338b569afb378ba6d6d46ceacc341b2d15f353ea1b1be54ea179f5766a90bc76dc49d2fc7ec519a18aa0f3b7b00c0a2e10632dc4b3e2bc5f25e6853a358b7fc86c34a8e4d8748e9e085f99beb2402c7f96024b58c7cd2ab374455d99a6e09be6f9267105739116b2765b7bbef3a8b1bc4876e29396cf33837846bf169e1324472ed862a91648fea1c490d8eb769b3e1987d83a28c15a4c3fda78edbe38ce7e3a28e05d2e470e5f40cfca27672cceae580738ed6fe688ead6fcfed5d32865aafff0411e1ffd852a2a43ae6c83c8d5622b4d99a82a93d1f0b1e2f6ab8c5d287b11fe193a3da7304c95a996284f72e1c870e55ca0f52e6b1ba1f3e899b9354085e87e5ad98ef1eb85c26afebb8051185a5c68ebbac2c9237d5c51524396b5db49afcbf103486fded26de5e204a33ce9b1a38e2917318cfb8aa272498c137623d8f328e0a958dc1085a41c0c8f068787a910d8dd70bb0f271f939befc57b45faf9e5cf5a415082158f6cb8d52b47192f5aa2b7b32058ef15feae501e5d2ed44edae5aba3a675612528fc6ceb4c7be2e8d29b29147079b38f7278c7ffce1a2c44dde8703074d86bf1b57b4caa5a3e6cbaf9c6c2f67d90de555a076d4584f8f88d65bb3c41f02e0f0b479ce99c5c1cdc4261038bf82611625b133d0ec5100d4353283b3ae045859796769e7635fa1f83c26d6e6b8a707e0c986111dc8cefa9eabb7daf652861426dd6d19a795448eed5ae5ecf06d5d419ad6d3aa8384b396fb2384e5c14ca292c229e64312575021b5b941dbc46137f6b377793af4c3bd47465c1825f46dff6d20d0f8e10d0625af318d80b41f0dfb6f8094775756c07d8d6518a2775e9a8ea37234b49737984199175245f64643bc7665ce7183566053926768e53b6e3726f2e4c678d80ad7f9284b9e99a8ef9fb1a2d8b6f1f96ac0d148597009dae0322ef52f9e5c2d7b014dbc873c995e268d2f5465204044e0d90738c3b3e20c3af4ff7b1ce0e3d9f7cf6ba7a4649aca02c7079dce11496e7600980fb3800745ec144c0678fefdd4c97ec624d9bdce6e681fe2dd97eb8b9422824fdef6770fe7c7efddef3bdbd95c9d0a7f9e2add6f17b7760d0927468860eac9bb6325f40ace9375a41e1e0b3c9d49afc1a1bcd3380f799ec0d2d8d1351df788e4ae91becfd8ccba82bee5eb7661be7807a9b60e46e7e0dce6d6fe31eeeddbdedf586362cefac50494e8c35eac16eff4208d540a291a57a56eb8ee8e4b041bb9d651a6ac794f485c50a50c09a43c90c9277576f31c7d076770efedf9a3d8a91ba2b4e8eeaefb740df7afad4919633122ef520411646229ed7ea508ff6163a1f090bb467ee1c1c18ded6f2360b991f1aba12e9a8bc127d34cbf16010e788c3259958bc2811680f5e9a04eb319e1f7533607e222763f1c9844cc98719afc565a7cc6802f20e22fa1fdf4565a17e4f442c90771e9321faee410dad09f70f4d0781832260a7e153cb2f00a4e957f799d24fcd09655fcc95a98805923ba9ed9afb54e8e0a83ee62abf2e5b4097b8f42fe79cd371345b83105988dcc227698b10ec2ad677d7c12781a28da0c3f1e388cc0442c3257698a4cfe46d86d31f43cf85e0bb5503b1e43c75555c8d449d0ce85449f537f9089cf49475ce836d361f2c237678c17a081a2cc1348f2e8efec24d5f406b497b1dbd5d9d45422c3a25d5a6ab5582b1f9069f06b76b0b1c19ded8bd4ddc5b9017b37c1b860348fc18a3d0de97007bd20ddb11170a44ad340c7e321764fcf1398f4add9db11d4db2cf5f4584d46dfa231025696237c9d40b068c8eb6036c7e4902213c471aeca4486b1802b01d0bc13f3f2dacea4c85eb20c0d365ba8e89fe1acf33d3e3694606539f1281d1aa29f5b38000bf2cb148929f1ff49052f7830cfe0ebf1d357dc5b31786ee54023b451503b66c3c3e5912280f08ef2571eff56177dd1c2d55c8d35d3e1c3f00ba573239180b7f45fd25e4a064af68fb41cc8e611ef64863d4f2510dd7e962394de866930562232027ca9c23d115b223ca7d564b8522a8f8f579e33aac02c1d9bde6aaf897b6c6b597ff2e7c9dadd32257795be5da41288f82f89a8201dad2a146f86adb95a882c7308247c0ed250c605fdf2eb96b74236bf334a70787b435009e387ddc6133cc98040535fabd7ffbda8e35c56d8a16122a2ac3fb41c06b6060268a9a39c717645eb82f30bff3bbf5b909fe1a11914c5ba81720c374ec5c6bf7e284fbe9a35813d13fbd2d2c37702804819cd8c97535e84d2a46139062a24170ce2772e5610e2571442e3b445fd946120dd9b3d23239a4731ea2ee4b7a0300febf88ab8e402180e51bb5f14fbd709d3967437a763db2363620c56fbb3c93dac3a228679742cb0078c60e6a592fa99e49c1bcf9146b8c1fe2898d732e69973a4ffb0be8e4f4b306da79a917afd3ae66e4f0f2e43244ff51d43a1d1d773c116e8cc3a3329884548ae016424782544b46316e9ff9c63c4c784f56b5c5115b1c95068995bb076372c5329946caa21937585457b561c7ec21aa15edf4be46fb349dd2e7dda2b7a1e4bad6a1c346a42768eb8badadc37c2a2b5c81ff281cc9bf9beb6bca7f3c5329b6539c213c5b133f70955067cf64ab6ee163b9201cdb52865a453f6349e189dbe1a93557b9c34d7d62b95bdd297332bb780ca4a23740a5df54e35b02f32eadf29afd00b0d7471ca35ecbf47d7b6cb9f237959473e387a9bd97563e1d6e6916efbd59562b3c8a8dc59897db48ca49f9af05dd9ba0787c4fccd3ca87db9645cd78fa2b1a5e51d40c3a0b7bc1765e32955b9a49688977e780f40aa78a05a36c92ee93eade61d7166203bea1fb654faedfdf4c9b12c898bb75e8622a7f7fedd39443eac3f750edd3d651fa4c7d944a002f087950e0cd49b48cb5690e1b3e30c2adc8c8c2f9b2a8e88bf9b92d8ce52d45ed69bd112ccf557080e576b513e171be895bf12a8e41ab309adf309ea731e9c21c9e59c402273fa5f31d3a5918dadb193b822ecb34f8c2d5833e17d4345223c511c8efcf59dc4e933d11994f06756bf680fb238e08285cefedd38ff8c8b6f3714bf78122e3f54daac867d42d490ecb6516e8ab0a7c7921a41990bd13b5798c5ee4dd2f65be607788dedd88aed42bdc4dd9ee20dc97a82852dffe42ab3e48e25eaa0dcadb828babcea8226aafd21084817176cf866b1adb93d1a1829de4495931ef4c821bc58b570036954fa34a6905944ba3e560a1f5bc25b98215720eb6716a820acbf6149e25a54a3e80fee3a1f7ad7ed5a90feff23a42a474adf9ce79f72edaeec43157a597b982b5a7f9e679dec8dc019a7fdde4a719b9e7dd51ff37ddbce86d68e61004af888f2aabd45deeb06c5c153da365d37db89fdab9920f0abca584c9acbb74d228e38afb54a76d6b7887538f4f8934dd5ade2162066678e6817541bdd947684b20b49db5cb6e567df6184b94e04c6cdaf49e1eb6132b337acbdb14ba661021a52d5069979c225b7816792ce8f87c273fdf50aa7fe27b466d14f79584822c2e64174f9fe0746bc0a66cbfab75462bb9a2418c707d9ac939bd2eb76263503d39ddff62905d00628c2270367a6904397890255303d4cceb14b10a3a6de1ce78c5ee2570cbd410c2dba3a49c74887de723c6f4f6a4aa34eb76747dda09bd0ab9c4bfa57ed3a70e6cd12d615ff40d45bab8d80774e4dfcae21c55344e0b4d759c159f506c218b1a83a2c08ec2c38ec34ded0ec2a57f90b783805ad5f1521c30966599441c438430c64ba0f3dadf7e8816b0b58489d3cae816ecf673f8dd9ee7aec4bb0e4d08728b27c19a9f97494ec5d2e9d9ad6bafbe03f34786e7bd7a6482925b7409b587c39baef4dca02d1fe1dbaf076a375d8367cb184d6c4fba12cbe7ddffbe0ee22711f03bea839640326d31e91a0527edb396d6796fd54a3764990c491a5ee625085a04df3cfe2b69c3e342e8e5e6ea14800516204bf63d19fa413782ce6d8895e854505f71195680d726ef1c56c7e1094989010ff5326518c2963a0b473ef254e158bf35a9dea49850da94180b2ee392bbb6572b25eda74bc9f7f3abe15d402ae4d689d4c3aa086f12319d40511e0ae861444410e47e3a3d918a0105a6a6272da5e28aecfb489a6f7872129fca07c7700970a8ba36858c94230b4e98f53445e77ceb8012fa4e9db2c3d00f3f057599d233ab0ccf2ccaed3b0198d2400189263efc2f4b40e168e215980087cc2646968ad31a68f5664ef573f378da6a5ebbce9ed4d79b50d09cb27f2c54be11424bbaecd8a9d6c51f37b22326bf53b9a03159144704b822b9f96011c89874075a639ca3d732c7718bfd710d79ab0f1cd7ea7006f3b255364cad65917e675e8e0b87e34f8ca4606ec65b0c79f55f594458eb112b83b7de49446b4f9989358c35f81c46ce32b464eee2d36e3caab334433d8c88e8d6f8f55e22e17fc439a7eb714b7649576b462521a23081861fbf4dfe6a8ad61e9bfd6ac8221dd1409e1752540cc571b950db5659e27534f1fa7d8d8a23ac194748e39156162358b8df3620f912b9659bfb2d504eb5b18b49629f6c67c06908b9d8f367c234ef017c86daabc27765025397681143b9a69c00b321d249c003b847603e9fb70a4c2e33aa7e1c7a0b46defab6f38e67e379ec65554e5de481bc9fe8d82b90866dcb4368f5be29659118193a223a0eb1290f5ab3d966e3c5207c73e9b4b665b3fa345041940c223299a25ef18d310a3a31adf5b461ce80bee991e8a118ce324d6b3271b34427bb323eebf1c24ad8d0e85f8d2ff5dc1adc121283fca4d6cad16333f109054ed2d0e111b374ce9dbd61b6f1c5945ef7141c3e13f58835af4eda92996e15f6699336158bcf781b9ad13bd2c86233e10684168e3d662c050f632cebe3513cde0cbeb34ffd5039b95d34e5dbb44a88c67c9c7bdf2e34697d55b19c3c397b697a36483eea198fe12394f0cfdc5576a4a9c221ddb77192de08e77a776414bc66e1b7db0542ab5f4f4d6cc875fa0a617c095e795478a30908bff162d9f0b9f5de4330a8e2ef79dd6e8620639f4cc77ab5b9fad1c4f5f66f7fd8ef692cea547e4ed0c191f2bca3185e3f3bf95ad2d191aac5bf1130a5b9ea15bfab0fd3dfd8ce3187bafed1a708413a3042da147a369ebfdc7e69adab06e426315141ed4e9fb88280c81e789f4fafa771d411d7b7ffa30afb7fe4903faf8737d21bc626b17b6a3c4c5a32be0ff355a5f8f7df2a69c2bc1c043bd83819454ada3fff17ff8698abb4935f85b515531cb87fd4eba3428f6a178224f97b3505f788804ebe7cd0fd55331dc23d6b77b1bfc9b0e6ff36b5f05ffa5ea27b6ac39293e93f3119d4e084fb1ce0bfea410e88c41a5ce58d36ad2527f020a302ad856e8daa5464e10b8fa7405ed6ada0d297c284731f93686d03f505863690ced9a1788d9e7f2df4c421a0e13388ea067262d6c92eb96ccadb879ccaa42074773b7f9fe5a0a4f279bded3e2bc3593ad5afc2aa09b2c84b08d4a8cebdc90ef607b4b7b7156fb49411ec0c854269b501fcd0a024739ff544ce4197ee767eeab13d79e0f282121d66880c63efaf03892dd2c653f8a014d38a9f844fb4d2d678a4988a48ecb108c4dc0b774ac4bfab5f6fe1e9cf4c2d1582de835d5959e44ca78798086522a32c715506f976670b4b6c1ca2efbff2fad8fb2c25289b1c5819c8bb0f12d86d9d8ee6b714cd82a16b4005e8fc8fddc54fdc89b44722ec138a09349a5ce48e5d736233e26f9094158bd6600b4d44787c7d7f7380aa227bafb25faf525c3e72ee0069681b75a9485cc4d472de841dbd1bbda175622c3738b600c6da1bc26408f0dac8023568171427c4a51ea453bb30bc747899e7a6de994e560e156713e38d0ed4f07dd81c0976bd69948c330e9dacfd423b7d1407ace35b15df228b3b092304b63ac20b6d7087ec1e048b191a7215402da9bcffd3aa7753d88e86b445b122fd3e3189f09a6d543ab0ef65cff16248bfd40378a1e11ba21977ce4bd7293c2c9728ca6dcaf07acdc9ddd0d61f3677fcb98d22262f77800283f001b7ae65f24dff84b633e47323a0bdf400b88fabd284614b9c79407ea4ed84eca2531eabc010235895f4188afd74a2097856f5b8428cf1082268ac17380bd984a83c947b20c4de8bf839f38d8cbf69ca1c10397f8028019209cad7405bf0cae9cefcec3dcf4d250fd5cfda840658e4366e64fd6dbb650ae9aab259b273e09dfb08c5f3f7b10439b96d46c1b00623f26dbcedd72741d2dae7542ff21f2f16fcd8988d05092cbf07cb3f34ea9b170b81d4afd9ef8eed8d0cbbe4d7830e7a6e7bd7ccfb8841d066ca7e82099a424c817036df0491bda2e6c408d9f5986a710c8c8440453d0ace6ebbaf9f97c21bf51ba2bd2e843bd8106fafc239a7131c524c172ee1fdadede46ec937c3598122fb25215686c1aef24cdf1016a5474f5fce5f7cfdbf623181c7115911c9eadf68aa972ae97cc98ed76f37311aa54df87e04f25d048b991f35d6a82e12f07914024c7553dcad0708068151b43b11c4a09b17061cd74c0f1fb20a3d3d71c422844b54871420d4ecb76b1ed85b7301d8cdeff1f7bf02025243a12157fd64234510b75b5a9dc1e9ef750026a7c0d4470213ec9b0f2d8e944a964d3ec6926a778428cdf460e8d5b8bac710a7eb8b813a5fda74054ad0de735112beb53aa1bf06ef3735088b863dc98c9f1f41053358c84290cec30a764958cd3180cdc2bd0d52136ecca67c069ed93fea8c93e414184f37c839c6236e3ef39a3d8a3269a233ce02dcc75c750c3a4b4ca846e832fbbb5b0232bbe8aa10fc155c9306b89f58fc5c81a0f950cce49da5ef8ee5c85f3751b9fbb94d39b814599536a8fb9c77fb9562fdad6d124af384fa8b23c113bcae5cdd3fca0b676ee5ebef38d4493dc469c8524d29c0a6f14bb2a07f65386fe2a396fa4e5ef90148328111aed499da403b579eca205ccf907bb3de4c3773da453f3ab38cca6df8fbd10d12c108cd47ff8a241cb4428e497e038fb104704647fae6e1a41c5bc43029748d17175636ab6286b68e655a76f450eea3bf5eac57ba764fe581582d2787abbde0a4b020a1b9282b6c165637a3e21538635873bc033fc9694249d181e193aabbedcbda8b3799eb4011b4c167a39a3c88d8b696085aa747dfb255c15f146e3f9b5d9cbf4dde2e06aeba8a0125d22e5bb407dd1a1692613718f4da1fb883976c3b3fd12dc596069c4817aed916eaed469b20d5d257499694df9b754bf16bab4a5f3030560a66de288fe5312be520f2471b5c2854a3b83e5bac9c15da7c2f42ec7e90f54f419e409a9fc84c20bbcffe0ef74fde620efd93e425bfd326bd00f5e3d1bd62f556a871e548d6346491e69afb45cc68471a2de599156fc59d6ca62d3903c3307446002a0d3fe06780e7a6e3411f8e758a4e78ac626c1a10de74b7e150ec2df95f2f47357a5430370835be96dd5bf21f08b5bed72d6a30a5dee5f6fa405612a0145ccaed4f939ff7a9a7f583cef62faf0582f5f55b8062141e8c96c0221c8c1e002dc57b9a10a6962b180546d4f285ecd41d0692de901bdef71d8ca27e016304ccde174279856e418b368b0a46a5c587539487ffaf622f0df1f4e53cc0768da8bb6a4cf984a7b7d493f7b52f6ed04aa0630387a24f051de5f640a81efbf67d996b16beb7e6348b243dc8a0c5d1e794207da004642481db5d09bedbb6a0d40c77c3cabbcd1637819d010d1567d274c48afda0e53d302bc3168f30aa561f5cbaf00fc615068ce37593f6b7e9f23cc1d69401002f3f852f1df1eb2e544e783e17b6b7442c6da22df1033bb8f3ac007b7ba1b1d614a642682a0eae8540a2ff1f9f025af40c7ae4edbaf37b62f815d250a443436fdf55fabd78c67fc31bcc1093b1278f1d1731052b92d0980916920faaedbcc078654c09ee067793d9a9f12632a6358a9199fa1fa7233496983e47cf38d9100c6b1eda3e40de41a88dfb3691ba58fa0b355fa165c9963b453c62c350f03969461b177b15172ba59eae32b66ea27140e5ac048373ebbf2c300f08339350a5ce3c00ef2106c7469f5aef6e434b8a95fb7faa73c4668ea5f69487f5bc7ddd3985aa0626d3c1f277aec67f89ca63c8b409370c6c317da6afd3c7f8dcb19b9d1a92a51eb4905945f1fc13bf790cc5e8fd5721b34db5404451e9178d08de3b17764ee464ed82c1feb3830b1e9ba7289cc38a2348e2952ed3497a1f526ee760051190ffb1d08ec143511a6056842cb28bb11034f949b5f2e88140abf34f3c6739448a408ce5b3e0c64f847f655614a41aed08687c011d1785d9332427459eff310b048398fb582ad4438867a2f7103ff552262b752098ead66c911b6e7279786750bb10d706e115e2dfda342b98d945004e3aec3dd78a69997558db285ba02ebe2d2145f24aae06657fd80548e323698f80f9bf47e48d5d86ac0b62a4984b490c2aad8c0d563357b23f4fb259ec3d8471eace90c29a61e04d414b558e9b86b5403ca787b356e9e39f186961f86738e74a0622be276f2ca9aab1f83adafe085aed2cb2446d2b8491b9cad5d9d2bca86eebd57ec275a141be6e34f0226c13c78055923a623ee6cc5a37a5d85aad518d77f5d1d7662d14194025818a946d85b1e9e7231f48aeaa367670e0310a4b57365e506030f13c492c3fdfc483b8a01e8fca88599cccccad0c4957d54df85c9b6baceecc7678e7dc723efd24e190502534956066483dddc07617ee78448dd448571261e5ca1ed93839ce077da37ddcf9c7e8f095ce21faf47832ece6cfdf64002eb56a37172490913e830013e9e857f42917a4d920f329f6b26eda43cc952978abeac9a3ea9dbc06c678d5b4f1928ec3b83c77317dd7f777f145e7442cd971765ce048bf6c25569115030339702d4ead7117d34f7972afb0bcb199b3fccf37cddd2271a8e403d7e4fd2fdc71749cbbfdd816126e00cc40fb29beac41f5c052984a784582666d934208f0ecaea073c24d22b264fa47576bc6ee2eeb452e872a7d8e2e02c7f8d43f33a6398be1e6840c33912841a4727d7d87afe460eac6e24783b19290d86d7797987ce7f3db42dcfb9eec64fb209e1b6f1f2560c619f9a40a793fede93c8810041eb718f231ee6e8ba48a7f8cca5ff77f376f1565e257813fcf4dcc6cdb3bb873c2d2d6d942fcc9303ad573c911709480d9b4d9fcf03a56d55b320c4de80a5083f5380ba943b30462f5b28fc7eecfed1b89146b216b1ee39b0527c3db97292142fcbe19450ebdb3a4106be9e3e83d39f42ac7f609e470f346ebfa5ff22eb35adddff941bcc084b4421b64051ac89832e80543d6e3bc66e334b5a0f92380696cb1ed13f3cbc486f81957943536fcfd2ea625849f2dcdd6dd40f2e93c33e3302be6c0a4ededf6d4d077e6da5b5b871df6f710ea9f16df0bd2e8304204ea4d15483a77d9a6a160c4842228c27efd57bdd618f5e6e986e263795156b13145f55b805acd967d12200acd8bc307c9fd85913793144afebd6eb6854a24708b45a910ba67c476e347290fa697c1fff45d415f25c896d38f90d30792bd1ef44f5339be26d4ce7a15a9f23b89f785b9c769640eb303f6378e01a3eb48faa3f9fb3d9e319d4bfdcc50fa83d1370345249c75f9cc600c7f022561ec613e21ad7e1f2ee6e5909d4a8315e1fbd424c485f62b089a553331a66a580e093a9f7fd8000869f3e554479d641f537a44bb95b24fc7fcda6bcdaf12b98324d612fc032d17490c7d3bf4acd077ad3de64fd4989ce467eece5196dd0ed0e55054f0c58d5b97dd1cd066a4498a648ddcf29a0f3568b79f302e418e2c36de4883a36a067edc13b21290c189b5dbfddee5ca518b0e1118f4f0f9b3cac16d66ac221d53b55077a23d28372e27b7787dff602c833bcfdabc5f81b71f064b8de29b56223d22a2a3362dccba587163e039a63ca9bc883ad168bb0e54431b72b014a66760e64d34fd01d0aecbbb10611e1145af0a98514eac66a0a1c6b7952730dd08810e61ec27c6426bc3b5cabf3091b99ca8588f6ada27c5e9c3d582fe1611ce54aa08ecbd5e5d8b66e1959e147a2636ade6d2991c06b2d561ad56ada06a53107eec21abbd123800b82c6ddc7994cb13e89902a01a60189db63a4dfcf0d0ef5ed7f6c8266c64d7a42a12b089ded5a702d95a9e900b7c4ed4719c6460cfa2b3da3ee1e8c8855a7799cacbb4d5959ebc7ac42220b86a4e39d2257eb97cc3665df7ea9e30b7db6e937f2873910ac38e6ad163a6a4f6c82ca77b8a647b43a78af70c0ed17b9ff6ea050536f7e43af192c57a69ca798af69a2f9d82e194de1194500786c1ea311588ca21137f6ec974cf772a2d2cd1f4834ac36ff142d2ae833c463a2b72d543753bc4eb9a699fe884d4cc1587c9c616412630cd79e4e0e0cb45eddc57e581f7826d4fe18cc5e0a1fa7e12bef280f62874cede79064f430c58e5490abbf20e9eda781d691c6fcb04d0669d5f96e259eeda694db3d93526de25ea7d051365a9c9136b85d0f11774693fcdb6ba693ef8dfb38309b1a4201ebddfbcaccba85a32a5669888506c73fe2fc1dfed68e88a902223bfc8f061d75e0e485c95bc0d3f29d5eaa4601fbe6d99613d5497899052d127ab78455b57fcb5ed23905797b77c73d6271fd40485c371f43725db2f01eb24ebb5b9f87fa2d7c9460e652d36b7190ed930d88677c8a92ae1157d97f856158f5de347eb1648bf41156533936274d9589122957fea0233872216463d0c50362dd7e278155b9f9ffbf86efaa14fb71833e74375897d92e9009bb0b609239d29ef2af90b4099e4104f47bae31a23e1e3332748a04895416f3379a25fa2a8c98458eca03a1558314f9f78b692678684814ad96abc5e1bba889576a8f59003a4c8e7bd30600b5fb6cf41a2877a7213bf4c66aa5cdd9f9c19748d62f8dca2372992dd0e134ebbba2f394cae4cad123201a78c4c8cb73ca1459f99336c6362dc278df47341489264d119953ef8470450df2bbdf1e4515b78d0e9bc8b274f1bad5a18d34516e66310f006561f5b27fa5927cbb0cbc2038bb5d2b858692435d100304b9c49631c570c5f1e405c1fbe09812c4d2e070eb3527d99293148438351392f2d85ce1fc9a17856d1d434af06b793b66b33fbdb231858a642a5eb785601aa014a4fbfb0dd5cdc3be1010c2995b2b8203914f68403244859653f21cc41513b8d339ec8009571c7f74fefaeb1472234186e6f3a19d86dcfb75e59017de022b30f6e6785c81223946d861bc2ab7caaefe8803d1e5e6cd4a88567b7b32da64cf5e3cb1c641924eda5c3d40209733f3c105f359c21c37637bb1ffd2b6f6b0b5a9cda318ffa3b8d9ad65d08da76262b66120834a2cc655184aace73e17c00829a6e190765f50b7b52df3a383f453f70f1707c3f825265aad0f3d5d34f9e8122f545f4249f15d3b7b26fb8ac7f786d19336419eada0d593fe02a871084067a5bf290c7593947b058d9f8c014bbc5c8f7db6c3bac426c9a45a3100edb857129a0bf751d2414cd9236dd66715a817303ea02f3079ed285ccc4df62410c246f3785c07a86b99de018c54b6c74d47f4977b244ac8f0a784f1fb781ad4481f776ad5429b196f8efc377ff5da7218553077bde03a23e0746dbdbe645b9ffd621b075dc6731efe1696d735f12737657e64966752fb2358af95e62b49eed1ea6484f4ca6c9cdb68e452c6d668e5bcb87830562d94d7f3cf15f6501d35dc1d7c541c4825b7748b50c050f8cd8520d51254f2b6709a5ca0f40f9b6a5969a28ed4cca8986590cc87db982d923d426daff8e69ddfd675a8855f167bc6382df51cd5caf3e86aed62d7c32553b773484c5a930f03fbc23d8733c6f5e9ca6e7487d4711279c733a3eab09065462c3bf25ebda81e4dbec65b3a68e0185cedd658a9e0ea8cbada95ab0154d3493365fb39bcdd7a65deedba0ee99c218daa1e13e1b89416f8d421cd777f66ab0ea9fed3821d819467e90b5838c9e91f227f266f1adc00cf81aed11b673d261eebf0a223b65e4411d580eee7929d8acf4025534fcdf815f099a2c4ce6530d5e4b41068d0257f3409251521fec6da96f23d8226875b5b3427c4cf988d214998572b8033deb8136e9ae6c95f4259b95f054f86d8f237cc84a0e4bf8335b30e958d384cc4c00fe2b34c65b57012de05c57532cd02b903b39c7627abe72b98e9f7c4351b2c40c59fc3812c54e5f664bf1473c7ae503c73da4bb83de032485e28da1a1ac955914e2ce52388846b5d729083153af0110b82e4b75dd3231a13825c23f754286b0be8b6e7f5b59baef25aec5d3df1f74f5959b83619a355c0df6e7338f31da66c8fd2e2d64d0aea11c01614e9be36e3bf2901fdcf50e91b5d4ea4a0022c47dbebb8b29fc6527ef6a3c0ac028b6ac71081a5cb4c4d650375a23b320a8db496d7c4834a988f7b57024a88c21c4c8a1d0392e37a4ec0a5067bdf1b3290d1db1024280ea67ebebd8613b2fa2bd43fb30b5884fdc7d694257f25257464db2f0908975d662c36158448c685987ad6f33766e28401ed653c5cbec59a7a0108d7a07e79e045d1ee7b82bb670d06485c1a3bf3fa6b3e2235616e1da158f26f730676649d83df5e3a7c84807392905acde84349cff9892c9848aa0d248df2b90bb57c420157295ef54e86fbd9552904216348e774dc5cfd9a78e16ca31f9899281b853e42416a59f2c4b50f6fea892c0e2e8a5e8ddbacc28bb5ef53b154eb77a4377fad14484be917bc989970e4d1917acdc596b73d669a2b1439d9d1517d4a28c0548101bc2403541735251036a545892ccdd011c81593911ad0600e865152cc942ddb6b410b88eb493b5e461b060ff77896d75944e78c7b9cd23390084a7558ec4303af7a6d7ea5e7048687c787a2edd5aa532c51f6464f6755ca60c5b9bc2a85181f9762d2fa4dddf324c427a117143ba1fd837c036d22ab3fd250073d5311cff8858efae04c130d27a2e145259011f043df0af0cb9eddeba6fe4ff746e47f47343969450b5a9d437add718846053898973eb195908b8e359daa10878198479f1da86c8b9370815d71c20f429e5b89505741161717b52f57e6b016bf8afdef1df0ed55c36759492d85f63f2a605427d19afb19e8307df553cdc6f5219a891bd24fcd362e5048076ce2ea430d2f8b5313370768cef9531295f9e207e53c6734361056d96ad929c3ad6424686f53f0555036c1e7fc70e8cb64c0b606836eb6baaf7ea894f84c1496106f21fea36d806ae987db17875d4878fd21281f88ad95994058d2a94fc7f2664fa5708dc9525182c6baf2d46c7ad02e27e74ca68958798b600053f43dbfe844524e2b2d5d3215f2dc68a083393ef8cd1bb77252c6e3eec954c13010412e60d16d27a5f62687025e486ad10a3526313a5a97c1fc483cbf17fbbe0bd1ac189c09d45cc0ea74bd991277b13ed19e80a5bf9d5e5ea7997983e2f52ef216cb0ea86e42fdf68edc2560e5c03a5d0e5812f94f9a39295879ebe149f6d61ad73ca48f3e3383fbb9f2a1e98319033dbffd816f02302ef3b11cce7c86b766b1274f50ca0412c1b7d9ddad4ffb06574ca48447943d8ce1f74864f4a55bc1196353ddb647f72da3dc7871e0feec066e677a646bd3c6d1eec83d1d16b8c736e169d9e7a86426c05cdb640c9a9578834a0d0a7ffe83759b83451221b7bc1c03c8cbe36615a1cad1c97ef3ad14a1401a250c6f9d88b4a14fa9f3c9c90f6f1b685c24321c0dbef6e630e6449a1714f393aa1e447f1896b86a12474ae49a2545fd511c14ad2d5b62dbb8f47c6d8dcf2921a2906c274bd458eea4740dbe6762533652c9af6116d9396c569fa7c0fe5b2db3c5c1e82085607344694ffcceab364d068d86533690aff2d78dae663f65aa526ac6d843dcd0b4b4ec2b24b737c3ec80565cc47a226caf101fad9c5bed4607f9e730db2369b946218867d7ebf46c9ee75aff4a9bea73028e92b6f7801d0cda3ac64bfe0487619dd16428f2cce55dd816de186b197ada82962b0951b7a500d0c753f87d1608ac1771931f96090447ddef371d107c7d865f38b5587360cddf246984d6c4e836c0c61acd2ff4da24f0349799981e26c92e2d2c8822117000556b908c3bcf04385419e8f7fcbc3c958fe461f915386774548274ec03c9a0b86577fdc2a7053835609198d6bf57e77752312a4cb2cb714018ac7b97b63d9ce62d25c1a2ec71e5221a1532478b2463010837c1c352c1cd947c5b51ad97201e1e2fbf5c5bcbde75abbe71467e0884e667bce39d966a30f2567bfa9012ac1414e79e25dad1a559fdebd3cfdfa1d89f0fe658012b4d4cd7032804aa8ea5f88a442516976811adf951aea5a63c1b0a8ca915b6e1d4ab49e4e1d4746f9560217d7f41ff0501cc0858fb727f307ba15fc5e8d4c1b330edda5464ef256e7d598eff42a74226a76ecd56ce5762274d994511d1aa2a933003adba7c76287afc216ae704674df803fb8361f02b38f1df1b644912d0162b8eeb42638f1cbb74f2f624dbcbbe917ed69053f025f3f983e1c4a079dd44661de42d183dd43510ed7f2ed42287175c10ce85043cdc8b5cdc9a068084388a26a72ff13c31618bc8d6c8d63c23c5471ec3014be4f217572ca2a809f945ac74e20787d8841f03a79e05c50ca9ceba8b9e1ad374ee5ad27109b3ceafaf3661e554c456115c426feed0cb48e743841f153bfbbfa0c4a15e65f8cd9ef3a24b6e8dbc01c1313d4fb82f34db0bb1f23c0ffbb584e65c55b631827019649bd37b575655e347c439cb1b79e44eaa1f509ade72b6ccc7de552fc03847cb755b9623d8f7015dc3c48a79c5b2b27ec5fced10c346915c93a6e703d8b4b7db600ad24faa653475c813752f6805724c32aa6fc2cb8ce0758bd1d44d7f8da4ab7d5d955d9a9b1d2b53d304ee08da1b264212d6b38d703e9c36421e59ec8838eccb48ebc224f721d3fc4bb31108dc92de910c20588da5cb0bd14089fc6e5e24c0c9a857ed81732dcf818c62971ee5001a5e08f663ffeef6849049e191e91488cade2543256cb1650adfad2b1b2bcef0ef7bb208647892348b3d74f01b1b50f360deb8154552d88caa8a40ea93245a715a1f37897168b2c3fb01bbe0fe4ababafc8fff0025b4babd8a908c1202b5d24ac01fe32d386dab9473f9e04c63c51218f4755eee276655a447bb8f4783544039e2e3d15fd08084eda7a8cbee6e1eaa5e0c3e449b06ec267348c3f8f41eea90b92a2da822ba0f4984918ad22ca3122c6b203a6ec62f1784c64c8ab651eec1d6df7f4e78f60d2e12681dd6fcddf9608245032c7dfaeeab6978e4f43e4a36e269d7c171e7939fc0f3ee2502bc0dc704a4b942baeefc69a6b11160be13aef8a701b484ac5dc6990f38b23c9d588bebcf821dcf52231aad9d9a17f6562025335bc6cbeb3e46028014ad0b1abfd47f1ead00beeb76059e3b7c3a2167e7b3954a1756e0addab0209dab3b85bf8187e6f8aefc24da46f43d4d57f3e9c787ab8955833ec0b3c3003987d645690d6058c67e587cc13abeb07496777973344bece0ba7ff9c62e304a5144f63b71a8f24317e4c69dde68f13cc475f6d0ecbcea20f106c1a0e0f0a5fd63ac5058394512b916beeb533535dd4737fdf8d5959a572899cb7101948cf39613e546687477e353fc7278c12aa49e901143a38748f6e7b2c9f5b083edd87c6460cd4a42ab5b68e82b3526a742f2a03fae2da8b95bfc91da24c9e181596355c78a1b58b981b756121d83b9af2864fb303935aa03f43c785b1930d32a429ca331901201c7cb7573aee79e1987f72b31df0fb9140fd925fb578bc26575f763523614bcc8df2f8083fe97f1896710f1166a7116faee4ac0ff42b38bb25b69a1abe1edfeda2a7665b6d58e22a5b488000198eed9173d232714f7179de57f2006023bf6a4e617bfa02d857003c6f30fb22d6164afa3c9f337749f7436dc73236071e4d0919d8b5153d128f4a45499847b051d96a87f1ddb901dbfb91e995a3df53421e292e6b7eda73d781ec106b1fb70ecbcf5cd7631857ff792e2d31c251c77a0a2a66e46d6b51b4744f5da756514dc5a8917ea0c8a2d31174a8815f5b0e2da33a70e768ecb56729734c1f70db4b83de88216486cfeb37cb9ff719f3ee1bdbc95beef674b5af6ca18d6064ac78464be7206b79406b34f11ccdcf4fdddd7909e97187714206bae5b240d0b34aa6a53cb4eb389ef5750cbdf3b178ce99adcdc711bbcac6793e8ddd4d6d7176c2d8f1fe2737ff0e42249135d42f21f70d047c8bcb73fc0d6152abace44aa4dde82707c76887b918da14bd08641f11cc9a266a116e1d60da5a990213a80715c5315eee20b211e8b264e357387db5755c60ce3c4b197b248df9cc9b8a63803f45f9c3e980517c8d474994c96f24398101df70ad0f0b9f234078ae7f14d2a330b348c486dde03a2223d24a9c6584a7b03a2f5d8f96aa655c79273e5f629a38c411e5e01ca0d2b14bdbac2031a56b23ff451622adb005a5dd9872ae4896d98711b74f911b9f19823526dc0e4df307683be16518dfabe032a9b5530659ab9a72814723f3fd0f9029226bcc6534707c987115bd59e18ff3d7b1a577e257b079dee5d352d51d8813d34e9349b24f55f382bfd5cabb10620e4375d9218368996a082ecf4aceb60eda37e4fb0e04ac389d3250a2f19ed68f7d63f31601e63c3b0a1ba9ce0f8e05a3084b3b003731bcc8d97032b46fdffc388476cdd40ef918ef81a23eff6f9998e646a8beacbcf917a636f469b4cd34dfbddceba06c6958813b2e6a968bdb460150a1306e26da3b84bda0a07d7d86d2ca6f33134597f203c9ae51f87a843a1426b56fa2b3b2e04c46fd6a4cb33757921086b9b29ef4b2afa9a3432a31ac5a76bfd9975c6ff9b54c1b947ba313e71eb80def60051009d0ef40389ebdaf7a553ff39981f5482457b2c02571b285b802eca52b0142142a0ef510c91fd812c805e3529dbf234222f0704ba7b22c1444f83bda3ae29df100c94e9fc7dabb32840a088c2406d08ef2d8b10753d5ebcd4c08eec35e15542a2b19e42c48f211e6d3ee222c6d5feec759f09a87c3ecaf31cc06b1262feac7b1900873b1dda417f764fe09623af6ab640591f8b9e4a9f7a545d434723469521a207fa6c522f86c279e57c39c0e28fd4935097d3678f29a5dd168ef2cfd86f2cffafe0c1e5257005cb38ec311960e65ab037c7f1ff97a6c11c6ac90f24499ec8e8923b14bdabbb3b9dea4b62e285ba86528d50e51cfa0876decfe9b5fd35811eee1ad85cc36dfd0354e23b297de7159021be58d9f096aebf5cb819c64f27bacd3d74a79c5ef0ef1d69fab893e8994aa7418e4a8db7b7ea96224655ed030ebeb386497faf49bd8539dfeaec4c3b895348adfdd3795a66cc42829c1a9d9d16115a95ebf988f8a5d9929d42355fbc72af5b9bd65b835fb510118d602d4d9a2ebe8669dda74ebe2e8b8ded8c951c186b73f221669893df084a6489d24cec4356f1e858d27953e1ef119126c4ec0dae612532f161eb144e81618aad0ba4921d3689b1c8d0e42748edb7c0f6496cc3b0f24ef2f167df0349de035bc8e112510301dfd0151c66c4b7b4c918a9f09562fe8bdac6f8b22132d1f939c81a6ef8128e950e648f01d2aa7234a67e76ff5251a0ef5e55f53645d5a8717e582fd716502d76315a06485dfa591899dcc09718c970fa674f9294c9526fd86b7a3e0d0a20f7e34f19a94f817e67cabdbf35cbe313b444c4c0077aa0c762c3f72a79032ff446e066196146002df17f07f5cfffd1667b79de17a676c98bb2cd5b0fd4bbca67de391952d644328146eac064c300905dcb6125f02b5c0075938192a213c0eee46a6a79d059d36bf1abd7b30972ad4b7be1fdc2486c0bf0890b85023b6ec4805c0380447276f3b70442c2b06164b4731f5126fb5812bb25d0b0a87ed30f993b220b52ca03acb5395db50d9e805e179a571527eaa734a19f3dc781112002ef6bd55a4ebfd678c2b5f771f60867689c55c444c0c364e03ed133638da11170f9506be3d4b814cab7a4a383683c99791b460edc4df3dc7b26cb3a6b3cd926765412f5f9742e6b75049d78e13b4e816f522d985048097f27d30c87215452afb9404330e25c78bfaaae68508ec7791653a1966fe9dacabdf99c3d48f6db7f9dbab482c24920921e5504256cb6cedee5bb3a08bd4e8048ea1b04438ba757958d5ad7cfc5c029ed4e6d3b07a02cc371eb3bf277beafb792f41442c660cfc4d361ccdb4ff590ed97d39ad59b177f8dfdd2f93a81f9c7bfd46eb76e07b79495417de6c6779ed1b14e641d527f104e41e64f6cd5fc5393cd17329d8f04effc2bdd69daffb95ae50824d1e2cc623e5e6d13abb5257ecdbd417821f58703fcdb0592daade1644da1212f7089f623130a6425f04eb0e00b3d8ca12bfd679a8913465ceae0373bec199206c8a0f246588e1c242bdceb47f171afbbac9b4ae6d4d830ffd4e77c9c756384e1d1fd8112c665b5b4a681ea7bffc1350456efc48ca373fcad84d3f7982fa2a7f1cb082c021307fc70edd3df640606cb54b694568a7be7ddee314992deabffb8cd004ed00ad90c8bdb7385db93dcea872ef6a65f45882ab224fe81eed3aa8a01bdbde20d6e442873b8ffd85d42f3379b75cf190e5bd7e550c04ac649ef229efc7f99611dd04ffa19bf9691e56bf661e6b577b5312f1bb03383a718fb13aa638d49ad03ccc5ccaa66f288dd61d840098f8be42367c4942ef8717bc80c16be2ffce55e13503354c4dc8346fe40f3444cedad074a896ba95172d86f48aaa90d9967a25435dff880fa13801ad43b544a65957db6e82f48cd69176366c1e52889a5b0432b1d768d522132843797ed3a6d996cac0afc99b9c7491c67481a944e4b6700a9d0811beebc22c5bd067738a84afe9b590f6e5a54d7ac059080f9479adc9e3fdfaed5e85d30ee1ac67ac1ef2a202a6329435ec8b18ff22675f27f5474db322a22a47081a39947d315db299a57e10bffab983b1bd6d7ea26568e5b47c052f897631cab665b1aebb6b328d992dc91493751b1c870deb706e6b7b0d6c00a7b37813eba67e22e54e53f3065704f84c5cca6f5e2bb0e70b3684a2ceff57c106587cc3ca0d04505d53aa3d08ab3e89c62ea4f9abadc85e63aa96406a2d14820578640f2c61e73507674ff5e67e6577304d82cea6cc16c551455d5bc606555a3e9ddca158b87614606f6d96fc98e991ec34c8a8eaccda578bdf9f2974d10b5ff54fe2d9b0efa6efbb85844bb43f27f04356b8b2e976c6d42bd7966450b18b679dea83a294f24a283e74921fe874e3b4691a965f3895f7096867c565c123392af424bfe51e28aaaeeb7a0dee721101fd7f683c74f4a8dd1075909a100ee917df641175f86ca38738aec254de09060b036bdba2f9b86693adc7aeacdfa4dc9ffa78a991255d8b73e2462596527d463486b4d8ed14c7b4ccfc20a229dec36208ee01633358faa0a0f0591d5c71aee0ceee68da8a5ede084895f7c627ee10b127983804155e8d39ef1f95bd5e2dfa1f168e2b039ed2287827e06c53ab1a09737644c03a2dd66a75345d0aa111d3ad536e8e520451b3cf50ea54af71d84302f9bae1609c609fe35cefb8a1b0d2c3755f87a09a40a7f15600bb1f42ae4505f836cbf8a6b168233cf6e30f7b94f44b61402439f68a58bdb7acb9861e5d5bffd10704fa4d8317e9d6cce24cdbd500df591626e5abb3d7ae9afcd13e407eb9a3bc8a31b07fc9ff154c094573b9331efca95eed1835e7246801f46ad4f9122ae89acaad0c32cac7e0b082c4c097e88aa2af7b83c2c4420482b32fc1ab733e5ca9418eae05690b379379a36175c15400fdf48a29d6bacd082ad65ebc98e89bd475761f256db53cb5aec42f2671a0dc026fc3ff43187ed71fdebf48d88bdc5b1672dc14fc36ffdfb4c4cc36bab5a0ae0a4373306698db47cc2bfa1aaabdcf2778a82f200dbcd14dc69721fd261b3dfc31e07a99c2dcbc4c73e9802412daf9d13b29586b19b02dea0314a51190db76a91364445bec591ac22d687f8208b6c6f51e0fbe1dd5d7ce71424322b1abd91eb95ed9193c79983f2fc140d41bd2027449559bb6ca2ac690eb88dfae7c752c152bae5d8ea068d0c7a1bc84723d8ca2652c6859513e65614bb2e11a1f7d2e27766b309868e25e29b3e13fb4a481bb42065d77350792ab4eacdfc71084f709905f2f80c0e460e5140801d68799203d8f32eac0eb41839986ad3ecf1d263fed51d79dad9dc8086f6528f6de2ad216017398475b3813ea270846ec41794878a08e2a2226885f7f7ccdc99114194a2080bdb2384ed31a49dbcf05fe51cfa649d4610bec153260b2bb2308a0d537c79556e7331cfef98daabecb78f3b9fcdd94bc9e2e910afc4f655c15f29eb1fc3aad33c06a16d306bd9533925c7f7670689afd40e3c9ea49acffc64edc5e41a21ac3577bb101955b10e7599a5e8b44409bb765e4deff41eda575a548848c21aeaa7853dccd436a92cdb34d9845df24ed944dd6d493092a20e20564afdab1db019b0d70a45afb443e3057e3a09a2bad6ce75fb784356b1dcd53564ee30b4a581856bc941fa2dfc4bb6cb81829dd53ead89d851540ad302d085be7c826d97c30fa82c2632dcd0de6a6fdb3f4410525c21098c718e1b4e612cea78d084fc81a9b4e56e0dedbad54aeff10f65ecbb404ed7d387f8f0087801aac5107a990a1ac136bcb22420ef7fd03a69a7c5aca17d9ecb572675093bcc94ba11bc2b245b41e717582384c3807e9d63417cb0de1ef65aeab52e03c14cee9ac0a62393c4f40bc4e22f7f0b9a3e081460fa25c11fc150925084ced05f47529840882100695ac3f26f9c54aaa75232ab8757c73a6030fcb69d2528d5ece64e07f6ffdb9a877b8ad68f5f9d1ebc096a64184f6c5b0da7471f0ab81c59cb53105a34f38e8d5b3d87cae1dd83e606592bb71f7bb158ebb353572de29ff95c5580b8d0850c7a3f60287e20352c2ff39c3f4c3bd08d32975da1be914d49ab5539b254eef7b47566b4335f260549626c73f3bdb5d2fa4227d40580255e8888390be758c0f0df0562f93efbe909b2e135d9c1d1230f0ad1cb592f24cb7879574ce5650b8e561b362895ef2fa686b1880595701e17d778090a21a5dea1cb3d8727894dbef26b989b641c11e7774a7f7ec302ca702640d5b1293ec138033b97cbdc733fcecad2f5f8f261ac5ec69227130cf66544bbe9a34a12f511757011e8db74c04b39f31e2154d64b2a518f36931ad96e39e55258b40afdb5b7fa19275e5187487d61de3b4fc6d91ad68bb6682635c2a5edbff629019e03d149b1f72c0dca4730be99c16ae9803fa92b6101e48fc7bca7a4b047fd6cf5522c00e437d4f294b7b73b0fb2674cae741fd658f8c03a316fced2ff54f622b583a531c0d037b962e1331a8b34e77a973c2d1cd9b15d1fc0ca5e3d58e0daf790885d557be68dc3654aeb4c8802bc0c5a25edac81ee6f474ee6b4ea0bcadcd70714b247435eeda1e248f072342f8da64a43a3009578d610f9d4f66b0cbe1b09c0c70f3f929917e017473176bedfe69597eadc90a1157ddee24ebf8620a9236f8a1cdbb7f7f54eb3caff40b7485ddba6a771ba189235fa3e93d8adaded80596216d0ea387aa9666670ea2e591bf471cc79f07d3b9a602dde9887f26414cb039d0f6cdb68fc79e6fb94bf0f995540081d8b7dbf9d38efd74e1e266f39b0e988b129f6d7810988b71c43e1bfb7788cdabd7af4392f09a05300168c8963d6f602bcabd175d08de876d9cd0bb7d15185b8ef3ca1ae2e5295920c157b13ff7c49767e22e93451ac9e9059cd4754955b7935ab42cc1c215b72c44bb1784b4b859b453524c31bda03b9e29e77b1631be278c335425e126be291cc63324c33efd9ac4bfb433bce7f003a855b2e5fb82e9acf648f55881ad2a1856d6e8bc3c8cf31d1b9a1589a73423f5f415fe7114d34452efd1d3343dd7c53cbace60b4564cf5105c5d3ad96a884d2107fb87f411c6df020f57ad10cbdc0b80e82b7b4b263890a4239c69257f72ef25151bf3d767677279cf1de74b75d61005520cbc2f1b9e8cb8850b42b1049a6b9078a6f1807d1891a03ebc38e8ced5efcaf302087ec04fe0149b77af37490d3d94cdcf585e877a6b0578cb8f3fcf180c8eda4e986c2d7faf93ff1f5bfa34ab4c1ae6b6ee5b8ce94d0a3b9a8c0036ca2604eef3819da981fdef67a2639f3c87d3db23b7f300bbf6205bb6536e438b4e20017494ce04f6e295b90c2ec0e3cb5d54415e617cbed722cb92b062111349155aa24387ce070be7588ca7dd9341080a86b6315fa08c61690a2d2b007f456ceef964d7ec6379f6bf176aaf9103dc3268b8ed46ad2b464550ae7dfdaf70b443031aac87f9f3f0bc70e999dd0fca5e76c2e731ffba1d1d765af4a23ee56e95421c147111add821e6a4d858c426c3d8adc663411db8d0c2e7621e765971fdaa4b0458d7e3e9f4ff0678e4c770272d0f8152a9eb0b088b8e7e2ea703f16fe2396fbe34851002eb7211d1af0e7d8df6badb2ea537c4833f0fd139774dcc8c0bc82d172314173b42ad791f35ae27df3eacb4f607289a82e99da3099a1b87a31398d0449253773e169a66def068155feef7e1b5b2c55313a02dc87ea5b891524d281f28fccf864a3afe5087e1f79804e876befc3722b472ce47edd73665e7fd66419dd2d1927a13953fbd8248c5fbad578caff46e5fbb5f9e4813c01e9f062156891b42969e918973e2502ae6d57a8285e155eaeb1f20a3edd9f9e2d77f0a6dcbf2e9f5ec1861e32370856555dcd4b9bb2437f0d89d0c65e386f3568badf1641b7703da1a12e9f540edb734837d0d890fa457ab5ff7ef27e633c5a216e92b3bd0d38110ea8bff1d9502078fb27054620dcd7be1535ce556612b0ef881f63ad7bdd175f14e90a63009a2de95e41bc012121b0a198743b36aeb11c83d2a24c5f67953fc6c525d053ac5446aec9267a583093923d14f46e8dd818bd9afded21945f4b673882531b095c2822eb68a980974c4a09bdca6ef0a9ab9c3f843407a665eb2dfbbe3a5abb66e7d51cd1cc1042b192713071ae1685400aa0d4f4e5465a4791a69fb324e79395af0d01e2cf90d302f1ac907362257c1d1f4031e8fd1f29cc6c143909f28cb6672c3c4cc14997514f96ec810462048a0283008d8594be4ba7de3b284a90435cb87ffd3badc50011b93591e6502dc2490476689e2f5b6645eaaca2715c39b2e4e9ef17e571a4a6c674ce285d4887b53aa70dfe351b3bd2376b1383da43e1dbbf260beeab33c76ae0039acc42870e4d4d5c7458c247e48d174c44dcc729fc10dba7f0a84fac4fcdc24554856637a058e7d7be0ae4154f4be1dfc26beeb9f8f4db066612f332fa219d2388496ac97a7609f2397e5e3c9bd6a8ce85321ac4d080186f1ee41e7158c2546486d4bf17ad63ed92621b202f58ba3ded2f818cb18e790cdfc993b8d99fcee82608875ea93d743562d0bb01edf750ceaef73983b55b8914c491094a39e522b5e20b9bf9a011bbc3c30f29abe15c49e0da9d91e5bd9c4bc45d33eaa721808a3809b8543731aef0a64e1cdea974ab76d7759a61af2ec10ad3eacbfeb6c31e517540820ffff748a7479ca87e6f55cfef77ca784a36535f91e2abe2fe8c847fc4795bfe99bfd12e476aa310a1e49a6f00380accad9bb20d7336c7d706a54ce6fdeb55a927220680a13b1940181d4710f9d92d51cc02ba029840378bad9426fe76a1e3edff19e6955bb983e4d1470e2f93256920141b8d8699bb979c7a9b8002159eca10cb19ca3c4480f48a9c928325e640026f625e04e1339d66318139c74f448e45c908166f1911dc94d671f372a7a4d15331cb554ac73e87a37cc5b383c2daf2bae5d7bdcc0412e6096c80345599878dd775ec52609ee842aa533a7431a62853bff48a6c9077e5b3262555132110811b1f725743b69f72ae27a21f36cb129ee6d807d317b6ece8f1b8ab47e02476d95fc4af08bf01cabebe5e48cce40d190ed83384de322f66beaed729d55237660cfaaae7d98188ffde1da7325c598e3dd59ea858bf655482c56ef03f98a70214ecb7d629ae64e758b15798be448d1d1db71bdd7fd599fb77c272520f92fe5a1b44beaf8f01c904f6ad29fae2fb9472d27137ed49cfb3765dd9f2d3dd885e900486bf3564a9c6b321afbb8232075711648d20d60bbeea569c32a533758784cb469fa1223667d1a8cd033111e1e5b0407e06cc9ad7370d70451b388720df3444a37188901124876b9f42613868d6f9c4700e6e5c4af290bfdc3dc8d0aa5a8c4ae4353019a8f2742c18d5ad91874611970cbacb320d3410a1f10a0534029f433fcfb0ce315a02cc5e1f9a34989ae2fa448050bbb0fbf4094ac46d651dd0362b3dc9c87872174f5edc2a5f80ffebafb37b1bfcb84cfcdfd2462996aed81a5b64be888ffcf84add73c25fd9e58e0a03a368661aa283f509b99b1410e593678a505f70e3bc1e9841517cf0b6be97414dbc045050f513786ba9f645362ac3aea0315e5bd532463cdbce100d11e6b4305ef49cf45d3ce7a984ba6e0f338976024e87e5813035e094ffa38b141c3a453f8fb416040e5ea04cbdc9594e795a3d272701b015936dc0df5d62629159609c4e97ac3e2278210dbd6cee626a0415b59febf89b887e87ffe9a7e217bd5c6bbd8d0bcdc035956fd19f8e74bce7f272b1b2a94267f2f964d4dbded46c43ca976ad967875d4aef50ca2ff738d44627c2584ec1dd3ad5498de756975241c78b7e4963f4ae8402120d1b0fe0a21add885d3c5db79926be5db69fd9f87c1f57bc9e0eb0f24c7dc1741e6e4181cbcc8add014155c3ef1e4f6f58bfef7163436bf509148a8d93c55ec05c5fffec734511c946bcbf7a21469e513f296bb293f042e92803003327399a5e1f1746bb7e992bf183300c21f98437f78bf00f3011e6a0824d00536885393c3e8af321573fd7bf6b10c5c3080ff88ae22490b67fc6a5d9e535add15109d26ce9da514bc3cf60b0e08b0161fdcc95d6288eb29f17cab951b2ce1ab8aeb089e0a51ebe2c0a63646a71c8aaea7ab9fb4e440f1fc1608fb7a2b5f069f7b02d92d381a61a1a8e8989a9cf56bd6d39fa8ff7e5ff4411bc3069bab2cff7a4b8560c70cc82c8e1970e7a3c491ea25f691b182d6643b897d0a1679f162b80490aa7684a077254a3711fc2e586cabd0b38632d9a5d6a789c03cba173b394d17a35d856c86c5b0bb6a9f0dd1a87c05660cf4c47a81d3e46969a9359b152fafaf2b73d2ab51dbac63fe24931c4e056396fa4a8bd0ad2c2115c90bbba217c9db7bef876363ea462675576fe02996dd46c853e8eb60b7b44cdd23204ef6201d203c7ac934ddd1d560d28074ffd9fcf4f7b6c1e55b43f9bb66bb5afe39b4fa74b1b24a28a702c1fdc7fb7c1238d28105707e1da645e5729ac9979da232148fc1237cdafec31511e6c49af457ff7e025347b69e41e245dbd9a99ba1a81fe976690cd4afcab7f6af2c7145107eff247ce08e6a3fb8c57a2e999fde82efe91c00eb14bb20a2fe20f9aff2fae28b9e15e036882479a2f2c0152ebcf04797489c6ea3e3a0bb1f1bb46e96839ee48451dd9759aefb1afafd006397b88bbe811ec3c162f113cab326e87364f2a2562c6b17689f47440225fe0858c1bb35f5db031139943cac5fe20665d7bae91712e9b1a2ae095d14048deba8fdb19b730f8f4889008bc97f0e4719de6eb22f765c7f86c3888e517279983305627c28fe4e87e6e6fa99a4a40ae76a8a1584fe9817561bc091dc1e8f126c383eb188b6a849754bdcefc2d8a0c57274c243cd716691cab88a5d7df7c75f32344cdca0025548462ec565840249469b1a4df580ed0bc2d8cc34d8c5b64ae20d8f76a334bbde85ace4be08c38854e011573c3f92684b4a1587c3465a902aa5713a0bb563ffe1ffccba50f1e039014bb4057925d93f46f83d6e6e6ee10a3d32ef3c4a446cd46c45d73b7e60656939ff33044c4c5608c372b179eb9b91c0079d303ab8f85053df4628d6b0e07296e110343b62109baade73af30648e80716da54ac1789553dad7821d9f2998fa619c19ab817ddd5c39e1a74e31fc39d0c6f5ce82f8ab4ce8c7760ab45b0bff159fcd7d6c75c79a963abde71d9bcecb461742bf367e67c13b0e74c522e9233d2b924bbc17e6681b0e78891db744eb4122330e9b470148caa7f15415ff1994f84e7dbde3c0079d2dc0b997a9dea2d003c4012bbcc841a9d65e3d915562a3eba6d28e136f17f7a710449fc0b5f00c530cefb107bf19701cd3c320e5d5ed0e0f1121cc7a66ee96cb6ef4b37fbf1f6f956f8557cdca3bb184eecdfee50703690abb0ff0f67f740850beaa49d5a80fc54cec199f9e2840e844ec9cbd1585dedf717d0e2656fe9ae7a708d5604eaf4d447d03edcb8ddc74e97bc6305777caca5999d32f43ada27014e8571094eedf1407938ecd66630b03a8db33b10fa00bbe9488644198b69cb17ff2b85288579cd99f9d67d5a95b3a79aa144cca9c090caae548b15d2d6c21ef3b7a3cc5c000d044df39a25aab78e2deaa1c74c9566eae20804821169db30170b301431b93eb71b47fffc275640cae8948e450daa3b4301c687ba99f6349578ba7874f9c3d668e22613dea33e35255a9eef2045f73d1ccaf29f2bacadaa2524db3e906c78113cc6653612b25727a82c1a40ee3f5c16d8334d72feff31f10100902aae1abed06d4ac663847d6616cb9e3ffcfb9ba545b3c24da2fa4e3ef166ed11da33deffefca8f452f1c6fb1dc3eada56a6387c88f46615745be048c0c75d7339c4345d3a2076396d7e9535b8eff30905dae82d973c29a818bbb4511d91d19bb958b8c1a97f416f821b42db0a5c56ebf2222a0e7e467bfe28c00b3519264d9e12ad8f2e3db134e9b4a840e2dca6cad18f4327483999c1326def0dac5c26ed273db6708041d9e010616f3f78cc369bbb270325e74f86b1e410b59e9988b32e54f4dae1183b6cddb972e6bf453af1d53d0bd45defa00f7f71b013b8a6bfe8e6e4644c33be27b1469ee86622ac360e51dacae0f22ab96b7b09719b5f3e39b561de52220a9b782755513b3bfac1e400fca2da61dd5345200ee1ce0b853bc7424ba95da24d0f16a6bd5a4aeab0b8f3f917eef35b6220d27293e21d1945686fdeff48d64aaa98bfcbe10a91ad16b5e32ffd732a8579fe153797ce0ec4de8ee03abfeec83fe5a6cc4d7fa5b87b0f0f46c7e827d65db778148712952c3083e4654db724670156540766403461227bc5d3ac6422eaef024207df00b21a2a05464bb481c73d7c21e3c63acf335a151e68431499cfc5fc6cb0a60f456a0d0c6b4149905811e9efb18ada95b4e306eda06964d2a99462bc96c1b62d15234a60686c48f23dfde18e35569cab2a85776b2aed3451145b8b4c686e8be7cf83db173d1e378616a9587113bfd8a2eaa9c94a1ff0d8dfee314c648f4644f303f2a405600bc6e4032a2ccab1631035f2222215171cd0bf587f2cbc316edd8bae12756654a8cd6fe98a0c5963ab6a431b709afb272f4eb097e6ee3f5df1ec4d7fcdc735cabba5fc83cf096c23272c8e9a1047f43dda8f614bf6b6a234ca386cc9202077e8e9560b46356d13159e126e042411e11679f4e22533eb082e9490862</script>
  <div class="hbe hbe-content">
    <div class="hbe hbe-input hbe-input-default">
      <input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass">
      <label class="hbe hbe-input-label hbe-input-label-default" for="hbePass">
        <span class="hbe hbe-input-label-content hbe-input-label-content-default">Hand over Your Token!</span>
      </label>
    </div>
  </div>
</div>
<script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css"> 
      <!-- reward -->
      
      <div id="reword-out">
        <div id="reward-btn">
          打赏
        </div>
      </div>
      
    </div>
    

    <!-- copyright -->
    
    <div class="declare">
      <ul class="post-copyright">
        <li>
          <i class="ri-copyright-line"></i>
          <strong>版权声明： </strong>
          
          本博客所有文章除特别声明外，著作权归作者所有。转载请注明出处！
          
        </li>
      </ul>
    </div>
    
    <footer class="article-footer">
       
<div class="share-btn">
      <span class="share-sns share-outer">
        <i class="ri-share-forward-line"></i>
        分享
      </span>
      <div class="share-wrap">
        <i class="arrow"></i>
        <div class="share-icons">
          
          <a class="weibo share-sns" href="javascript:;" data-type="weibo">
            <i class="ri-weibo-fill"></i>
          </a>
          <a class="weixin share-sns wxFab" href="javascript:;" data-type="weixin">
            <i class="ri-wechat-fill"></i>
          </a>
          <a class="qq share-sns" href="javascript:;" data-type="qq">
            <i class="ri-qq-fill"></i>
          </a>
          <a class="douban share-sns" href="javascript:;" data-type="douban">
            <i class="ri-douban-line"></i>
          </a>
          <!-- <a class="qzone share-sns" href="javascript:;" data-type="qzone">
            <i class="icon icon-qzone"></i>
          </a> -->
          
          <a class="facebook share-sns" href="javascript:;" data-type="facebook">
            <i class="ri-facebook-circle-fill"></i>
          </a>
          <a class="twitter share-sns" href="javascript:;" data-type="twitter">
            <i class="ri-twitter-fill"></i>
          </a>
          <a class="google share-sns" href="javascript:;" data-type="google">
            <i class="ri-google-fill"></i>
          </a>
        </div>
      </div>
</div>

<div class="wx-share-modal">
    <a class="modal-close" href="javascript:;"><i class="ri-close-circle-line"></i></a>
    <p>扫一扫，分享到微信</p>
    <div class="wx-qrcode">
      <img src="//api.qrserver.com/v1/create-qr-code/?size=150x150&data=https://blog.shimmerjordan.eu.org/2021/03/10/sz-educationLocalDeploy/" alt="微信分享二维码">
    </div>
</div>

<div id="share-mask"></div>  
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/SpringBoot/" rel="tag">SpringBoot</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/SpringCloud/" rel="tag">SpringCloud</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/tutorial/" rel="tag">tutorial</a></li></ul>

    </footer>
  </div>

   
  <nav class="article-nav">
    
      <a href="/2021/03/16/vuexStoreDispatchAndCommit/" class="article-nav-link">
        <strong class="article-nav-caption">上一篇</strong>
        <div class="article-nav-title">
          
            The difference between this.\$store.dispatch() and this.\$store.commit() in vuex
          
        </div>
      </a>
    
    
      <a href="/2021/03/08/introToSZ-education/" class="article-nav-link">
        <strong class="article-nav-caption">下一篇</strong>
        <div class="article-nav-title">Introduction to sz-education</div>
      </a>
    
  </nav>

   
<!-- valine评论 -->
<div id="vcomments-box">
  <div id="vcomments"></div>
</div>
<script src="//cdn1.lncld.net/static/js/3.0.4/av-min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/valine@1.4.14/dist/Valine.min.js"></script>
<script>
  new Valine({
    el: "#vcomments",
    app_id: "StYfTMDp78X0EltFR16ve2q5-gzGzoHsz",
    app_key: "G4RPxRpXG6RwdfpnJefOSnyy",
    path: window.location.pathname,
    avatar: "wavatar",
    placeholder: "ヾﾉ≧∀≦)o来啊，快活啊!",
    recordIP: true,
  });
  const infoEle = document.querySelector("#vcomments .info");
  if (infoEle && infoEle.childNodes && infoEle.childNodes.length > 0) {
    infoEle.childNodes.forEach(function (item) {
      item.parentNode.removeChild(item);
    });
  }
</script>
<style>
  #vcomments-box {
    padding: 5px 30px;
  }

  @media screen and (max-width: 800px) {
    #vcomments-box {
      padding: 5px 0px;
    }
  }

  #vcomments-box #vcomments {
    background-color: #fff;
  }

  .v .vlist .vcard .vh {
    padding-right: 20px;
  }

  .v .vlist .vcard {
    padding-left: 10px;
  }
</style>

 
   
   
<!-- minivaline评论 -->
<div id="mvcomments-box">
  <div id="mvcomments"></div>
</div>
<script src="https://cdn.jsdelivr.net/npm/minivaline@latest"></script>
<script>
    new MiniValine(Object.assign({"enable":true,"mode":"DesertsP","placeholder":"Write a Comment","math":true,"md":true,"enableQQ":true,"NoRecordIP":false,"visitor":true,"maxNest":6,"pageSize":6,"adminEmailMd5":"de8a7aa53d07e6b6bceb45c64027763d","tagMeta":["管理员","小伙伴","访客"],"master":["de8a7aa53d07e6b6bceb45c64027763d"],"friends":["b5bd5d836c7a0091aa8473e79ed4c25e","adb7d1cd192658a55c0ad22a3309cecf","3ce1e6c77b4910f1871106cb30dc62b0","cfce8dc43725cc14ffcd9fb4892d5bfc"],"lang":null,"emoticonUrl":["https://cdn.jsdelivr.net/npm/alus@latest","https://cdn.jsdelivr.net/gh/MiniValine/qq@latest","https://cdn.jsdelivr.net/gh/MiniValine/Bilibilis@latest","https://cdn.jsdelivr.net/gh/MiniValine/tieba@latest","https://cdn.jsdelivr.net/gh/MiniValine/twemoji@latest","https://cdn.jsdelivr.net/gh/MiniValine/weibo@latest"]}, {
	  el: '#mvcomments',
    }));
  const infoEle = document.querySelector('#mvcomments .info');
  if (infoEle && infoEle.childNodes && infoEle.childNodes.length > 0) {
      infoEle.childNodes.forEach(function (item) {
          item.parentNode.removeChild(item);
      });
  }
</script>
<style>
	#mvcomments-box {
		padding: 5px 30px;
	}
	@media screen and (max-width: 800px) {
		#mvcomments-box {
		  padding: 5px 0px;
		}
	}
	.darkmode .MiniValine *{
		color: #f1f1f1!important;
	}
	.darkmode .commentTrigger{
		background-color: #403e3e !important;
	  }
	.darkmode .MiniValine .vpage .more{
		background: #21232F
	}
	.darkmode img{
		filter: brightness(30%)
	}
	.darkmode .MiniValine .vlist .vcard .vcomment-body .text-wrapper .vcomment.expand:before{
		background: linear-gradient(180deg, rgba(246,246,246,0), rgba(0,0,0,0.9))
	}
	.darkmode .MiniValine .vlist .vcard .vcomment-body .text-wrapper .vcomment.expand:after{
		background: rgba(0,0,0,0.9)
	}
	.darkmode .MiniValine .vlist .vcard .vcomment-body .text-wrapper .vcomment pre{
		background: #282c34
		border: 1px solid #282c34
	}
	.darkmode .MiniValine .vinputs-area .textarea-wrapper textarea{
		color: #000;
	}
	.darkmode .MiniValine .vinputs-area .auth-section .input-wrapper input{
		color: #000;
	}
	.darkmode .MiniValine .vinputs-area .vextra-area .vsmile-icons{
		background: transparent;
	}
	.darkmode .MiniValine .vinputs-wrap{
		border-color: #b2b2b5;
	}
	.darkmode .MiniValine .vinputs-wrap:hover{
		border: 1px dashed #2196f3;
	}
	.darkmode .MiniValine .vinputs-area .auth-section .input-wrapper{
		border-bottom: 1px dashed #b2b2b5;
	}
	.darkmode .MiniValine .vinputs-area .auth-section .input-wrapper:hover{
		border-bottom: 1px dashed #2196f3;
	}
	.darkmode .MiniValine .vbtn{
		background-color: transparent!important;
	}
	.darkmode .MiniValine .vbtn:hover{
		border: 1px dashed #2196f3;
	}
</style>

    
</article>

</section>
      <footer class="footer">
  <div class="outer">
    <ul>
      <li>
        Copyrights &copy;
        2019-2024
        <i class="ri-heart-fill heart_icon"></i> 鞠桥丹-QIAODAN JU
      </li>
    </ul>
    <ul>
      <li>
        
        
        
        由 <a href="https://hexo.io" target="_blank">Hexo</a> 强力驱动
        <span class="division">|</span>
        主题 - <a href="https://github.com/Shen-Yu/hexo-theme-ayer" target="_blank">Ayer</a>
        
      </li>
    </ul>
    <ul>
      <li>
        
        
        <span>
  <span><i class="ri-user-3-fill"></i>访问人数:<span id="busuanzi_value_site_uv"></span></s>
  <span class="division">|</span>
  <span><i class="ri-eye-fill"></i>浏览次数:<span id="busuanzi_value_page_pv"></span></span>
</span>
        
      </li>
    </ul>
    <ul>
      
    </ul>
    <ul>
      
    </ul>
    <ul>
      <li>
        <!-- cnzz统计 -->
        
        <script type="text/javascript" src='https://s4.cnzz.com/z_stat.php?id=1279035150&amp;web_id=1279035150'></script>
        
      </li>
    </ul>
  </div>
</footer>
      <div class="float_btns">
        <div class="totop" id="totop">
  <i class="ri-arrow-up-line"></i>
</div>

<div class="todark" id="todark">
  <i class="ri-moon-line"></i>
</div>

      </div>
    </main>
    <aside class="sidebar on">
      <button class="navbar-toggle"></button>
<nav class="navbar">
  
  <div class="logo">
    <a href="/"><img src="/images/ayer-side.svg" alt="丛烨-shimmerjordan"></a>
  </div>
  
  <ul class="nav nav-main">
    
    <li class="nav-item">
      <a class="nav-item-link" href="/">Home</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/archives">Catalogue</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/tags">Tags</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/tags/%E9%9A%8F%E7%AC%94/">Essay</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/categories">Archives</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/friends">Friends</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/2020/01/18/about">About</a>
    </li>
    
  </ul>
</nav>
<nav class="navbar navbar-bottom">
  <ul class="nav">
    <li class="nav-item">
      
      <a class="nav-item-link nav-item-search"  title="搜索">
        <i class="ri-search-line"></i>
      </a>
      
      
      <a class="nav-item-link" target="_blank" href="/atom.xml" title="RSS Feed">
        <i class="ri-rss-line"></i>
      </a>
      
    </li>
  </ul>
</nav>
<div class="search-form-wrap">
  <div class="local-search local-search-plugin">
  <input type="search" id="local-search-input" class="local-search-input" placeholder="Search...">
  <div id="local-search-result" class="local-search-result"></div>
</div>
</div>
    </aside>
    <script>
      if (window.matchMedia("(max-width: 768px)").matches) {
        document.querySelector('.content').classList.remove('on');
        document.querySelector('.sidebar').classList.remove('on');
      }
    </script>
    <div id="mask"></div>

<!-- #reward -->
<div id="reward">
  <span class="close"><i class="ri-close-line"></i></span>
  <p class="reward-p"><i class="ri-cup-line"></i>请我喝杯蓝莓汁吧~</p>
  <div class="reward-box">
    
    <div class="reward-item">
      <img class="reward-img" src="/images/alipay.jpg">
      <span class="reward-type">支付宝</span>
    </div>
    
    
    <div class="reward-item">
      <img class="reward-img" src="/images/wechat.jpg">
      <span class="reward-type">微信</span>
    </div>
    
  </div>
</div>
    
<script src="/js/jquery-2.0.3.min.js"></script>


<script src="/js/lazyload.min.js"></script>

<!-- Tocbot -->


<script src="/js/tocbot.min.js"></script>

<script>
  tocbot.init({
    tocSelector: '.tocbot',
    contentSelector: '.article-entry',
    headingSelector: 'h1, h2, h3, h4, h5, h6',
    hasInnerContainers: true,
    scrollSmooth: true,
    scrollContainer: 'main',
    positionFixedSelector: '.tocbot',
    positionFixedClass: 'is-position-fixed',
    fixedSidebarOffset: 'auto'
  });
</script>

<script src="https://cdn.jsdelivr.net/npm/jquery-modal@0.9.2/jquery.modal.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jquery-modal@0.9.2/jquery.modal.min.css">
<script src="https://cdn.jsdelivr.net/npm/justifiedGallery@3.7.0/dist/js/jquery.justifiedGallery.min.js"></script>

<script src="/dist/main.js"></script>

<!-- ImageViewer -->

<!-- Root element of PhotoSwipe. Must have class pswp. -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">

    <!-- Background of PhotoSwipe. 
         It's a separate element as animating opacity is faster than rgba(). -->
    <div class="pswp__bg"></div>

    <!-- Slides wrapper with overflow:hidden. -->
    <div class="pswp__scroll-wrap">

        <!-- Container that holds slides. 
            PhotoSwipe keeps only 3 of them in the DOM to save memory.
            Don't modify these 3 pswp__item elements, data is added later on. -->
        <div class="pswp__container">
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
        </div>

        <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
        <div class="pswp__ui pswp__ui--hidden">

            <div class="pswp__top-bar">

                <!--  Controls are self-explanatory. Order can be changed. -->

                <div class="pswp__counter"></div>

                <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>

                <button class="pswp__button pswp__button--share" style="display:none" title="Share"></button>

                <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>

                <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>

                <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
                <!-- element will get class pswp__preloader--active when preloader is running -->
                <div class="pswp__preloader">
                    <div class="pswp__preloader__icn">
                        <div class="pswp__preloader__cut">
                            <div class="pswp__preloader__donut"></div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
                <div class="pswp__share-tooltip"></div>
            </div>

            <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
            </button>

            <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
            </button>

            <div class="pswp__caption">
                <div class="pswp__caption__center"></div>
            </div>

        </div>

    </div>

</div>

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/default-skin/default-skin.min.css">
<script src="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe-ui-default.min.js"></script>

<script>
    function viewer_init() {
        let pswpElement = document.querySelectorAll('.pswp')[0];
        let $imgArr = document.querySelectorAll(('.article-entry img:not(.reward-img)'))

        $imgArr.forEach(($em, i) => {
            $em.onclick = () => {
                // slider展开状态
                // todo: 这样不好，后面改成状态
                if (document.querySelector('.left-col.show')) return
                let items = []
                $imgArr.forEach(($em2, i2) => {
                    let img = $em2.getAttribute('data-idx', i2)
                    let src = $em2.getAttribute('data-target') || $em2.getAttribute('src')
                    let title = $em2.getAttribute('alt')
                    // 获得原图尺寸
                    const image = new Image()
                    image.src = src
                    items.push({
                        src: src,
                        w: image.width || $em2.width,
                        h: image.height || $em2.height,
                        title: title
                    })
                })
                var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, {
                    index: parseInt(i)
                });
                gallery.init()
            }
        })
    }
    viewer_init()
</script>

<!-- MathJax -->

<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
      tex2jax: {
          inlineMath: [ ['$','$'], ["\\(","\\)"]  ],
          processEscapes: true,
          skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
      }
  });

  MathJax.Hub.Queue(function() {
      var all = MathJax.Hub.getAllJax(), i;
      for(i=0; i < all.length; i += 1) {
          all[i].SourceElement().parentNode.className += ' has-jax';
      }
  });
</script>

<script src="https://cdn.jsdelivr.net/npm/mathjax@2.7.6/unpacked/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script>
  var ayerConfig = {
    mathjax: true
  }
</script>

<!-- Katex -->

<!-- busuanzi  -->


<script src="/js/busuanzi-2.3.pure.min.js"></script>


<!-- ClickLove -->


<script src="/js/clickLove.js"></script>


<!-- ClickBoom1 -->

<!-- ClickBoom2 -->

<!-- CodeCopy -->


<link rel="stylesheet" href="/css/clipboard.css">

<script src="https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js"></script>
<script>
  function wait(callback, seconds) {
    var timelag = null;
    timelag = window.setTimeout(callback, seconds);
  }
  !function (e, t, a) {
    var initCopyCode = function(){
      var copyHtml = '';
      copyHtml += '<button class="btn-copy" data-clipboard-snippet="">';
      copyHtml += '<i class="ri-file-copy-2-line"></i><span>COPY</span>';
      copyHtml += '</button>';
      $(".highlight .code pre").before(copyHtml);
      $(".article pre code").before(copyHtml);
      var clipboard = new ClipboardJS('.btn-copy', {
        target: function(trigger) {
          return trigger.nextElementSibling;
        }
      });
      clipboard.on('success', function(e) {
        let $btn = $(e.trigger);
        $btn.addClass('copied');
        let $icon = $($btn.find('i'));
        $icon.removeClass('ri-file-copy-2-line');
        $icon.addClass('ri-checkbox-circle-line');
        let $span = $($btn.find('span'));
        $span[0].innerText = 'COPIED';
        
        wait(function () { // 等待两秒钟后恢复
          $icon.removeClass('ri-checkbox-circle-line');
          $icon.addClass('ri-file-copy-2-line');
          $span[0].innerText = 'COPY';
        }, 2000);
      });
      clipboard.on('error', function(e) {
        e.clearSelection();
        let $btn = $(e.trigger);
        $btn.addClass('copy-failed');
        let $icon = $($btn.find('i'));
        $icon.removeClass('ri-file-copy-2-line');
        $icon.addClass('ri-time-line');
        let $span = $($btn.find('span'));
        $span[0].innerText = 'COPY FAILED';
        
        wait(function () { // 等待两秒钟后恢复
          $icon.removeClass('ri-time-line');
          $icon.addClass('ri-file-copy-2-line');
          $span[0].innerText = 'COPY';
        }, 2000);
      });
    }
    initCopyCode();
  }(window, document);
</script>


<!-- CanvasBackground -->


<script src="/js/dz.js"></script>



    
  </div>
</body>

</html>